//项目标题
var CONFIRM_TITLE = "久康博士";
//分享链接
var SHARE_HREF = "http://a.app.qq.com/o/simple.jsp?pkgname=cn.fengwoo.jkom";
//分享标题
var SHARE_TITLE = "久康博士";
//分享介绍
var SHARE_CONTENT = "我发现一款可以测量人体63项数据心电心率的应用，大家快来下载";
//分享头像
var THUMBS = "../images/72x72.png";


/**
 * 封装mui ajax post请求（无等待框）
 * @param {String} url   url地址
 * @param {Object} args  参数
 * @param {Object} func  回调方法
 */
function post(url, args, func) {
	mui.ajax(url, {
		data: args,
		type: 'post',
		dataType: 'jsonp',
		timeout: 10000,
		beforeSend:function(data){
			console.log("url:"+url);
			console.log("ajax_begore:"+JSON.stringify(args));
		},
		success: function(data) {
			console.log("ajax_success:"+data);
			func(JSON.parse(data));
		},
		error: function(xhr, type, errorThrown) {
			console.log("ajax_error:"+type+"|xhr"+xhr.responseText);
			if(tpye=='timeout'){
				mui.toast('请求超时，请检查网络');
			}else{
				mui.toast('请求数据失败：'+type+"\n err"+errorThrown);
			}
		}
	});
}

/**
 * 封装mui ajax post请求（有等待框）
 * @param {String} url   url地址
 * @param {Object} args  参数
 * @param {Object} func  回调方法
 */
function postWait(url, args, func) {
	var wait = plus.nativeUI.showWaiting();
	mui.ajax(url, {
		data: args,
		type: 'post',
		dataType: 'jsonp',
		timeout: 30000,
		beforeSend:function(data){
			console.log("url:"+url);
			console.log("ajax_begore:"+JSON.stringify(args));
		},
		success: function(data) {
			wait.close();
			console.log("ajax_success:"+data);
			func(JSON.parse(data));
		},
		error: function(xhr, type, errorThrown) {
			wait.close();
			console.log("ajax_error:"+type+"|xhr"+xhr.responseText);
			if(tpye=='timeout'){
				mui.toast('请求超时，请检查网络');
			}else{
				mui.toast('请求数据失败：'+type+"\n err"+errorThrown);
			}
		}
	});
}

/**
 * 封装mui ajax post同步请求（无等待框）
 * @param {String} url   url地址
 * @param {Object} args  参数
 * @param {Object} func  回调方法
 */
function postSync(url, args, func) {
	mui.ajax(url, {
		data: args,
		type: 'post',
		dataType: 'jsonp',
		timeout: 30000,
		beforeSend:function(data){
			console.log("url:"+url);
			console.log("ajax_begore:"+JSON.stringify(args));
		},
		success: function(data) {
			console.log("ajax_success:"+data);
			func(JSON.parse(data));
		},
		error: function(xhr, type, errorThrown) {
			console.log("ajax_error:"+type+"|xhr"+xhr.responseText);
			if(tpye=='timeout'){
				mui.toast('请求超时，请检查网络');
			}else{
				mui.toast('请求数据失败：'+type+"\n err"+errorThrown);
			}
		}
	});
}

/**
 * 封装mui ajax post同步请求（有等待框）
 * @param {String} url   url地址
 * @param {Object} args  参数
 * @param {Object} func  回调方法
 */
function postSyncWait(url, args, func) {
	var wait = plus.nativeUI.showWaiting();
	mui.ajax(url, {
		data: args,
		type: 'post',
		dataType: 'jsonp',
		timeout: 30000,
		beforeSend:function(data){
			console.log("url:"+url);
			console.log("ajax_begore:"+JSON.stringify(args));
		},
		success: function(data) {
			console.log("ajax_success:"+data);
			wait.close();
			func(JSON.parse(data));
		},
		error: function(xhr, type, errorThrown) {
			wait.close();
			console.log("ajax_error:"+type+"|xhr"+xhr.responseText);
			if(tpye=='timeout'){
				mui.toast('请求超时，请检查网络');
			}else{
				mui.toast('请求数据失败：'+type+"\n err"+errorThrown);
			}
		}
	});
}

/**
 * 验证码倒数
 * @param {Object} t   秒数
 * @param {Object} obj 对象
 */
function wait(t, obj) {
	v = obj.innerText;
	var intervalID = setInterval(function() {
		if(t > 0) {
			obj.innerText = t-- + '秒后再发送';
			obj.disabled = true;
		} else {
			window.clearInterval(intervalID);
			obj.innerText = v;
			obj.disabled = false;
		}
	}, 1000);
	mui.toast("验证码已发送，请注意查收")
}

/**
 * 选择图片弹出窗口
 * @param {Object} func  回调方法
 */
function actionSheet(func) {
	var a = [{
		title: "拍照"
	}, {
		title: "从手机相册选择"
	}];
	plus.nativeUI.actionSheet({

		cancel: "取消",
		buttons: a
	}, function(b) {
		switch(b.index) {
			case 1:
				getImagea(func);
				break;
			case 2:
				galleryImga(func);
				break;
			default:
				break
		}
	})
}

/**
 * 拍照添加文件
 * @param {Object} func  回调方法
 */
function getImagea(func) {
	var c = plus.camera.getCamera();
	var timestamp = new Date().getTime();
	c.captureImage(function(e) {
		plus.io.resolveLocalFileSystemURL(e, function(entry) {
			var s = entry.toLocalURL();
			func(s);
		}, function(e) {
			console.log("读取拍照文件错误：" + e.message);
			return null;
		});
	}, function(s) {
		console.log("getImagea方法error" + s);
	}, {
		filename: "_doc/" + timestamp + ".jpg"
	})
}

/**
 * 选择相册图片
 * @param {Object} func  回调方法
 */
function galleryImga(func) {
	plus.gallery.pick(function(path) {
		func(path);
	}, function(e) {
		console.log("取消选择图片");
	}, {
		filter: "image"
	});
}

/**
 * 图片转Base64
 * @param {Object} files  文件
 * @param {Object} func	  回调方法
 * 依赖js：lrz.bundle.js
 */
function ImageToBase64(files, func) {
	var wait = plus.nativeUI.showWaiting();
	lrz(files).then(function(rst) {
		//console.log('图片生成base64数据 = '+rst.base64);
		wait.close();
		func(rst.base64);
	});
}

/**
 * 压缩图片
 * @param {Object} files  文件
 * @param {Object} func   回调方法
 */
function compressImagea(files, func) {
	var wait = plus.nativeUI.showWaiting();
	var timestamp = new Date().getTime();
	var target = '';
	var dst = '_doc/' + timestamp + '.jpg'
	plus.zip.compressImage({
			src: path,
			dst: dst,
			overwrite: true,
			quality: 10
		},
		function(event) {
			wait.close();
			target = event.target;
			func(target);
		},
		function(error) {
			wait.close();
			mui.toast("选取图片失败,请重新选择照片");
		});
}

/**
 * 调用ios原生方法
 * @param {Object} className  类名
 * @param {Object} funcName   方法名
 * @param {Object} data		  数据
 */
function iosRunFuntion(className, funcName, data) {
	var notiClass = plus.ios.importClass(className);
	notiClass.defaultCenter().postNotificationNameobject(funcName, data);
}

/**
 * 调用ios原生方法获取返回值
 * @param {Object} className 类名
 * @param {Object} key		 关键字
 */
function iosGetDefault(className, key) {
	var UserDefaultsClass = plus.ios.importClass("NSUserDefaults");
	var standardUserDefaults = UserDefaultsClass.standardUserDefaults();
	return plus.ios.invoke(standardUserDefaults, "objectForKey:", key);
}

/**
 * 调用安卓原生方法
 * @param {Object} className  类名
 */
function androidRunFuntion(className) {
	var Dlg = plus.android.importClass(className);
	var dlg = new Dlg(plus.android.runtimeMainActivity());
	return dlg;
}

/**
 * 读取文件
 * @param {Object} fileName   文件名
 * @param {Object} func		  回调方法
 */
function readFile(fileName, func) {
	//从文件获取数据
	plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS,
		function(fs) {
			fs.root.getFile(fileName, {
					create: true
				},
				function(fileEntry) {
					fileEntry.file(function(file) {
						var fileReader = new plus.io.FileReader();
						fileReader.readAsText(file, 'utf-8');
						fileReader.onloadend = function(evt) {
							//console.log(evt.target.result);
							result = evt.target.result;
							func(result, fileEntry);
						}
					});
				});
		},
		function(e) {
			console.log("Request file system failed: " + e.message);
		});
}

/**
 * 删除文件
 * @param {Object} fileEntry  文件对象
 */
function removeFile(fileEntry) {
	fileEntry.remove(function(entry) {
		plus.console.log("Remove succeeded");
	}, function(e) {
		mui.alert(e.message, confirmTitle);
	});
}

/**
 * 封装mui confirm提示框
 * @param {Object} context  提示内容
 * @param {Object} funcYes  回调成功函数
 * @param {Object} funcNo	回调失败函数
 */
function confirm(context,funcYes,funcNo) {
	var btnArray = ['否', '是'];
	mui.confirm(context, CONFIRM_TITLE, btnArray, function(e) {
		if(e.index == 1) {
			if(funcYes){
				funcYes();
			}
		}else{
			if(funcNo){
				funcYes();
			}
		}
	})
}

/**
 * 封装mui alert提示框
 * @param {Object} context  提示内容
 * @param {Object} func  回调成功函数
 */
function alert(context, func) {
	mui.alert(context, CONFIRM_TITLE, function() {
		if(func)
		func()
	})
}

/**
 * 封装mui 触发自定义事件 
 * @param {Object} target    需传值的目标webview
 * @param {Object} eventName 自定义事件名称
 * @param {Object} data      json格式的数据
 */
function fire(target,eventName,data){
	var target = plus.webview.getWebviewById(target);
	if(target){
		mui.fire(target,eventName,data);
 	 }
}

/**
 * 封装mui 自定义事件监听
 * @param {Object} eventName   自定义事件名称
 * @param {Object} func		   回调方法
 */
function listener(eventName,func){
	window.addEventListener(eventName,function(event){
		func(event);
	});
}


/**
 * 第三方登录获取认证通道
 * @param {Object} id[weixin|qq|sinaweibo]
 * @param {Object} func 回调方法
 */
function getOauthData(id,func) {
	var wait = plus.nativeUI.showWaiting();
	var auths = {};
	// 获取登录认证通道
	plus.oauth.getServices(function(services) {
		for(var i in services) {
			var service = services[i];
			auths[service.id] = service;
		}
		console.log("获取服务通道= " + JSON.stringify(auths));
		oauthLogin(auths,id,function(data){
			authLogout(auths);
			wait.close();
			func(data);
		});
	}, function(e) {
		console.log("获取登录服务列表失败：" + e.message + " - " + e.code);
	});
}

/**
 * 第三方登录认证
 * @param {Object} auths   第三方登录获取认证通道
 * @param {Object} id	   第三方登录标识
 */
function oauthLogin(auths,id,func) {
	var auth = auths[id];
	if(auth) {
		var w = null;
		if(plus.os.name == "Android") {
			w = plus.nativeUI.showWaiting();
		}
		document.addEventListener("pause", function() {
			setTimeout(function() {
				w && w.close();
				w = null;
			}, 2000);
		}, false);
		auth.login(function() {
			w && w.close();
			w = null;
			console.log("登录认证成功：" + JSON.stringify(auth));
			getOauthInfo(auth,func)
		}, function(e) {
			w && w.close();
			w = null;
			console.log("登录认证失败：" + "[" + e.code + "]：" + e.message);
		});
	} else {
		console.log("无效的登录认证通道！", null, "登录");
	}
}
// 获取用户信息
function getOauthInfo(a,func) {
	a.getUserInfo(function() {
		var nickname = null,
			unionid = null,
			headimgurl = null,
			type = null;
		if(a.id == 'weixin') {
			console.log("微信用户信息 = " + JSON.stringify(a.userInfo));
			nickname = a.userInfo.nickname || a.userInfo.name;
			unionid = a.userInfo.unionid;
			headimgurl = a.userInfo.headimgurl;
			type = 'weixin';
		} else if(a.id == 'qq') {
			console.log("QQ用户信息 = " + JSON.stringify(a.userInfo));
			nickname = a.userInfo.nickname;
			var img = a.userInfo.figureurl;
			var sss = img.split('/');
			unionid = sss[5];
			headimgurl = a.userInfo.figureurl_qq_2;
			type = 'qq';
		} else if(a.id == 'sinaweibo') {
			console.log("微博用户信息 = " + JSON.stringify(a.userInfo));
			nickname = a.userInfo.name;
			unionid = a.userInfo.id;
			headimgurl = a.userInfo.avatar_hd;
			type = 'sinaweibo';
		}
		var oauthData = {
			oauthcode: unionid,
			type: type,
			avator: headimgurl,
			nickName: nickname
		};
		func(oauthData);
	}, function(e) {
		console.log("获取用户信息失败：");
		console.log("[" + e.code + "]：" + e.message);
		mui.alert("获取用户信息失败！");
	});
}

/**
 * 注销登陆认证
 */
function authLogout(auths) {
	for(var i in auths) {
		var s = auths[i];
		if(s.authResult) {
			s.logout(function(e) {
				console.log("注销登录认证成功！");
			}, function(e) {
				console.log("注销登录认证失败！");
			});
		}
	}
}

/**
 *封装mui 分享功能 
 * @param {Object} id[weixin|qq|sinaweibo]
 */
function share(id) {
	var first = true;
	var shares = {};
	if(first && plus.os.name == "Android") {
		plus.share.getServices(function(s) {
			if(s && s.length > 0) {
				for(var i = 0; i < s.length; i++) {
					var t = s[i];
					shares[t.id] = t;
				}
				initShare(shares,id);
			}
		}, function() {
			mui.toast("获取分享服务列表失败：" + e.message);
		});
		plus.share.getServices(function(s) {
			if(s && s.length > 0) {
				for(var i = 0; i < s.length; i++) {
					var t = s[i];
					shares[t.id] = t;
				}
				initShare(shares,id);
			}
		}, function() {
			mui.toast("获取分享服务列表失败：" + e.message);
		});
		first = false;
	} else {
		plus.share.getServices(function(s) {
			if(s && s.length > 0) {
				for(var i = 0; i < s.length; i++) {
					var t = s[i];
					shares[t.id] = t;
				}
				initShare(shares,id);
			}
			
		}, function() {
			mui.toast("获取分享服务列表失败：" + e.message);
		});
	}
}

/**
 * 获取分享认证授权
 * @param {Object} shares  分享服务列表
 * @param {Object} id[weixin|qq|sinaweibo]
 */
function initShare(shares,id){
	var ids;
	switch (id){
		case "qq":
			ids = [{
				id: "qq",
				ex: "QQSceneSession"
			}]
			break;
		case "weixin":
			ids = [{
				id: "weixin",
				ex: "WXSceneSession"
			}]
			break;
		case "sinaweibo":
			ids = [{
				id: "sinaweibo",
				ex: "SNSceneSession"
			}]
			break;
		default:
			break;
	}
	var s_id = ids[0].id;
	var share = shares[s_id];
	if(share) {
		if(share.authenticated) {
			shareMessage(share, ids[0].ex);
		} else {
			share.authorize(function() {
				shareMessage(share, ids[0].ex);
			}, function(e) {
				console.log("认证授权失败：" + e.code + " - " + e.message);
			});
		}
	} else {
		mui.toast("无法获取分享服务，请检查manifest.json中分享插件参数配置，并重新打包")
	}
}
/**
 * 分享
 * @param {Object} share
 * @param {Object} ex
 */
function shareMessage(share, ex) {
	var msg = {
		extra: {
			scene: ex
		}
	};
	msg.href = SHARE_HREF;
	msg.title = SHARE_TITLE;
	msg.content = SHARE_CONTENT;
	if(~share.id.indexOf('weibo')) {
		msg.content += SHARE_HREF;
	}
	msg.thumbs = [THUMBS];
	share.send(msg, function() {
		console.log("分享到\"" + share.description + "\"成功！ ");
	}, function(e) {
		console.log("分享到\"" + share.description + "\"失败: " + e.code + " - " + e.message);
	});
}
